package com.test.learnkotlin


/**
 *Author: chinadragon
 *Time: 2024/3/10 22:34
 */
class Person2 {
    var name: String? = null// 非必填项
    var age: Int? = null// 非必填项
    var moblie: Long = 1// 必填项，这里默认值1，手机号11位数字，用 Long 类型
    override fun toString(): String {
        return "Person(name=$name, age=$age, moblie=$moblie)"
    }
}

class Person(var name: String?, var age: Int?, var moblie: Long) { // 这里使用 var 相当于在Person定义了对应的属性，例如 var name: String? = null
    init {
        println("第一个 init 代码块")
    }
    constructor(moblie: Long) : this(null, null, moblie)
    constructor(name: String?, moblie: Long) : this(name, null, moblie)

    init {
        println("第二个 init 代码块")
    }

    val firstProperty = "First property: $moblie".also(::println)

    init {
        println("First initializer block that prints ${moblie}")
    }

    val secondProperty = "Second property: ${moblie}".also(::println)

    init {
        println("Second initializer block that prints ${moblie}")
    }

    /*
        注意在Person是普通类，重新toString方法 方便查询日志信息
     */
    override fun toString(): String {
        // 这里能找到name、age、moblie变量，因为构造函数里使用 var 或者 val 关键字修饰，否则报错，找不这些变量
        return "Person(name=$name, age=$age, moblie=$moblie)"
    }

}

class Constructors {
    init {
        println("Init block")
    }

    constructor(i: Int) {
        println("Constructor")
    }
}